using Digitalmes.Domain.Entities.Mes.Masters;

namespace Digitalmes.Domain.Entities.Mes.Processes;

/// <summary>
/// 工序。
/// </summary>
/// <remarks>
/// 说明：
/// <para>1、一个工序可以对应多个工位（并行工位）。</para>
/// </remarks>
[SugarTable("proc_operation")]
public sealed class ProcOperation : AuditedEntity, ISoftDelete
{
    /// <summary>
    /// 工序编号
    /// </summary>
    [NotNull]
    public string? OpCode { get; set; }

    /// <summary>
    /// 工序名称
    /// </summary>
    [NotNull]
    public string? OpName { get; set; }

    /// <summary>
    /// 所属产线 Id
    /// </summary>
    public long LineId { get; set; }

    /// <summary>
    /// 产线
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(LineId))]
    public MdLine? Line { get; set; }

    /// <summary>
    /// 工位 Id 集合（JSON数组）。
    /// </summary>
    /// <remarks>某些工位是并行执行的，因此某一工序也可以对应多个工位。</remarks>
    [NotNull]
    [SugarColumn(IsJson = true)]
    public long[]? WsIds { get; set; }

    /// <summary>
    /// 工位集合
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    public MdWorkstation[]? Workstations { get; set; }

    /// <summary>
    /// 工艺分类（装配/检验/包装/运输）
    /// </summary>
    [SugarColumn(SqlParameterDbType = typeof(EnumToStringConvert))]
    public OperationCategoryEnum ProcessCategory { get; set; }

    /// <summary>
    /// 工艺类型代码。
    /// </summary>
    public string? ProcessTypeCode { get; set; }

    /// <summary>
    /// 工艺类型名称。
    /// </summary>
    public string? ProcessTypeName { get; set; }

    /// <summary>
    /// 工作中心或设备
    /// </summary>
    public string? WorkCenter { get; set; }

    /// <summary>
    /// 附加数据，存储额外信息。
    /// </summary>
    public string? Tag { get; set; }

    /// <summary>
    /// 排序
    /// </summary>
    public int Order { get; set; }

    /// <summary>
    /// 启用状态（0->停用，1->启用）
    /// </summary>
    public EnabledStatusEnum Status { get; set; }

    public bool IsDeleted { get; set; }
}
